セキュリティグループの編集におけるリソースタグ条件を使用したアクセス制御を行うためのIAMポリシーの記述方法を教えて下さい
困っていた内容
権限の付いている IAM ユーザにてセキュリティグループの編集をしたところ以下のエラーが発生しました。
You may be missing IAM policies that allow ModifySecurityGroupRules. You are not authorized to perform this operation.
IAM ユーザにアタッチしているポリシーは以下のとおりです。IAM ユーザでは特定のタグを指定して "ec2:*" の権限を付けております。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*", "ec2:DescribeSecurityGroupRules", "ec2:ModifySecurityGroupRules" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Name": "mdfsg" } }, "Resource": "*" } ] }
各セキュリティグループに対して、リソースタグの条件を使用して、リソースタグが設定されている場合は編集を許可、リソースタグが設定されていない場合は拒否とする IAM ポリシーを作成したいです。エラーの原因と作成方法を教えて下さい。
エラーの原因はなんですか?
今回の発生したエラーは、リソースレベルの権限をサポートしているアクションと、サポートしていないアクションを同一ステートメントブロック内で混在させてポリシーを作成していたことに起因します。
権限の付いている IAM ユーザにアタッチされた IAM ポリシー("ec2:")には、リソースレベルの権限をサポートしない "ec2:Describe" アクション等が含まれています。
そのため、リソースレベルの権限をサポートする "ec2:ModifySecurityGroupRules" アクションが同一ステートメントブロック内で設定されているとエラーが発生します。
関連の記事については、下記ブログをご確認ください。
どう作成すればいいの?
リソースレベルの権限をサポートする "ec2:ModifySecurityGroupRules" については、以下の例のように別のステートメントブロック内にてポリシーを作成します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": ["ec2:ModifySecurityGroupRules"], "Resource": ["arn:aws:ec2:*:*:security-group/*"], "Condition": { "StringNotEquals": { "ec2:ResourceTag/Name": "mdfsg" } } }, { "Effect": "Allow", "Action": ["ec2:*"], "Resource": "*" } ] }
[補足]IAM Policy 説明
参考資料
- Actions defined by Amazon EC2
Actions
ModifySecurityGroupRulesResource types (required)
security-groupCondition keys
ec2:ResourceTag/${TagKey} - リソースタグを使用した EC2 リソースへのアクセスの制御
Describe アクションはリソースレベルの権限をサポートしていないため、条件なしで別のステートメントで指定する必要があることに注意してください。
- 条件キーテーブル
すべてのアクションまたはリソースですべてのキーを指定できるわけではありません。特定のキーは、特定のタイプのアクションとリソースでのみ機能します